package modelo;


import java.util.ArrayList;
import java.util.List;





import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;




@Entity
@Table(name = "Docentes")

public class Docente {
	@Id
	private int dni;
	@Column
	private String nombre;
	@Column
	private String apellido;
	

	@ManyToMany (cascade=CascadeType.ALL) 
    @JoinTable(name="Docente_disponibilidad",joinColumns= @JoinColumn(name="DNI"),
    inverseJoinColumns=@JoinColumn(name="Id_Fecha_Horarios"))
	
	private List<Disponibilidad> disponibilidades;
	
	public Docente(int dni, String nombre, String apellido) {
		super();
		this.dni = dni;
		this.nombre = nombre;
		this.apellido = apellido;
		this.disponibilidades=new ArrayList<Disponibilidad>();
	}

	public Docente() {
		super();
	}
	
	public int getDni() {
		return dni;
	}

	public void setDni(int dni) {
		this.dni = dni;
	}
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	public List<Disponibilidad> getDisponibilidades() {
		return disponibilidades;
	}

	public void setDisponibilidades(List<Disponibilidad> disponibilidades) {
		this.disponibilidades = disponibilidades;
	}
	
	public int dameHorasDisponibles()
	{
		int hs=0;
		for(int i =0; i<disponibilidades.size();i++)
		{
			hs= hs + 1;
		}
		
		return hs;
	}
	
	public boolean puedeDarMateriaEnCurso(Curso c,Materia m)
	{
		int cantidadHorasDeMateria= c.cantidadDeHorasDeMateria(m);
		
		if(cantidadHorasDeMateria <= this.dameHorasDisponibles())
		{
			List<Disponibilidad> turnosOcupados = c.dameTurnosOcupados();
			List<Disponibilidad> disp = this.disponibilidades;
			for(int i=0;i<this.disponibilidades.size();i++)
			{
				for(int j=0;j < turnosOcupados.size();j++)
				{
					if(this.disponibilidades.get(i).getId_Disponibilidad() == turnosOcupados.get(j).getId_Disponibilidad())
					{
						disp.remove(turnosOcupados.get(j));
					}
				}
			}
			
			if(disp.size() > 0)
				return true;
			else
				return false;
		}
		return false;
	}
	
}
